# -*- encoding: utf-8 -*-
"""

PyCharm 元类的单例模式
2024年10月21日21时38分
by wenyang

文件主要内容:


"""
class MyType(type):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.instance = None

    def __new__(cls, *args, **kwargs):
        new_cls = super().__new__(cls, *args, **kwargs)
        return new_cls

    def __call__(self, *args, **kwargs):
        # 通过判断instance是否为None来判断是否已经创建过对象 没有就是会创建对象 由就是不会创建对象
        if not self.instance:
            self.instance = self.__new__(self)
        # 首先盗用自己的__new__方法创建一个对象
        # 然后再用__init__方法对它进行初始化
        self.__init__(self.instance, *args, **kwargs)
        return self.instance
class Foo(object, metaclass = MyType):
    instance = None



v1 = Foo() # 真正的创建对象并设置instance并返回
v2 = Foo()
v3 = Foo()
def main():
    # 通过使用单例模式来创建对象就是只会创建一个对象 地址都是一个地址 都是会指向同一个对象
    print(v1)
    print(Foo.instance)
    print(v2)
    print(v3)


if __name__ == "__main__":
    main()
